@@ -3,6 +3,7 @@ |
||
3 | 3 |
from curtail_uuid import CurtailUUID |
4 | 4 |
from django.contrib import admin |
5 | 5 |
from django.contrib.auth.hashers import make_password |
6 |
+from django.db import transaction |
|
6 | 7 |
|
7 | 8 |
from account.models import (LensmanIncomeExpensesInfo, LensmanInfo, LensmanLoginLogInfo, UserIncomeExpensesInfo, |
8 | 9 |
UserInfo, UserLoginLogInfo) |
@@ -14,10 +15,11 @@ class LensmanInfoAdmin(admin.ModelAdmin): |
||
14 | 15 |
search_fields = ('name', 'phone', 'location') |
15 | 16 |
list_filter = ('sex', 'user_status', 'status') |
16 | 17 |
|
18 |
+ @transaction.atomic |
|
17 | 19 |
def save_model(self, request, obj, form, change): |
18 | 20 |
if not obj.lensman_id: |
19 | 21 |
try: |
20 |
- user_id = UserInfo.objects.get(unionid=obj.unionid).user_id |
|
22 |
+ user_id = UserInfo.objects.select_for_update().get(unionid=obj.unionid).user_id |
|
21 | 23 |
except UserInfo.DoesNotExist: |
22 | 24 |
user_id = None |
23 | 25 |
obj.lensman_id = user_id or CurtailUUID.uuid(UserInfo, 'user_id') |
@@ -3,6 +3,7 @@ |
||
3 | 3 |
from curtail_uuid import CurtailUUID |
4 | 4 |
from django.contrib.auth.hashers import check_password, make_password |
5 | 5 |
from django.contrib.auth.models import Group, User |
6 |
+from django.db import transaction |
|
6 | 7 |
from logit import logit |
7 | 8 |
from rest_framework import viewsets |
8 | 9 |
from TimeConvert import TimeConvert as tc |
@@ -44,6 +45,7 @@ def user_is_registered_api(request): |
||
44 | 45 |
|
45 | 46 |
|
46 | 47 |
@logit |
48 |
+@transaction.atomic |
|
47 | 49 |
def user_signup_api(request): |
48 | 50 |
user_id = request.POST.get('user_id', '') |
49 | 51 |
username = request.POST.get('username', '') |
@@ -56,7 +58,7 @@ def user_signup_api(request): |
||
56 | 58 |
signup_ip, signup_at = ip_addr(request), tc.utc_datetime() |
57 | 59 |
|
58 | 60 |
try: |
59 |
- user = UserInfo.objects.get(user_id=user_id) |
|
61 |
+ user = UserInfo.objects.select_for_update().get(user_id=user_id) |
|
60 | 62 |
except UserInfo.DoesNotExist: |
61 | 63 |
user = None |
62 | 64 |
|
@@ -83,12 +85,13 @@ def user_signup_api(request): |
||
83 | 85 |
|
84 | 86 |
|
85 | 87 |
@logit |
88 |
+@transaction.atomic |
|
86 | 89 |
def user_login_api(request): |
87 | 90 |
username = request.POST.get('username', '') |
88 | 91 |
password = request.POST.get('password', '') |
89 | 92 |
|
90 | 93 |
try: |
91 |
- user = UserInfo.objects.get(username=username) |
|
94 |
+ user = UserInfo.objects.select_for_update().get(username=username) |
|
92 | 95 |
except UserInfo.DoesNotExist: |
93 | 96 |
return response(UserStatusCode.USER_NOT_FOUND) |
94 | 97 |
|
@@ -116,6 +119,7 @@ def user_login_api(request): |
||
116 | 119 |
|
117 | 120 |
|
118 | 121 |
@logit |
122 |
+@transaction.atomic |
|
119 | 123 |
def user_wx_authorize_api(request): |
120 | 124 |
user_id = request.POST.get('user_id', '') |
121 | 125 |
|
@@ -131,7 +135,7 @@ def user_wx_authorize_api(request): |
||
131 | 135 |
|
132 | 136 |
# 判断 unionid 是否已经存在,如果已经存在,则直接返回改帐户信息 |
133 | 137 |
try: |
134 |
- user = UserInfo.objects.get(unionid=unionid) |
|
138 |
+ user = UserInfo.objects.select_for_update().get(unionid=unionid) |
|
135 | 139 |
except UserInfo.DoesNotExist: |
136 | 140 |
user = None |
137 | 141 |
|
@@ -153,7 +157,7 @@ def user_wx_authorize_api(request): |
||
153 | 157 |
signup_ip, signup_at = ip_addr(request), tc.utc_datetime() |
154 | 158 |
|
155 | 159 |
try: |
156 |
- user = UserInfo.objects.get(user_id=user_id) |
|
160 |
+ user = UserInfo.objects.select_for_update().get(user_id=user_id) |
|
157 | 161 |
except UserInfo.DoesNotExist: |
158 | 162 |
user = None |
159 | 163 |
|
@@ -216,6 +220,7 @@ def guest_status_api(request): |
||
216 | 220 |
|
217 | 221 |
|
218 | 222 |
@logit |
223 |
+@transaction.atomic |
|
219 | 224 |
def guest_login_api(request): |
220 | 225 |
""" 游客登录 """ |
221 | 226 |
gen = get_guest_entrance_control() |
@@ -249,12 +254,12 @@ def guest_login_api(request): |
||
249 | 254 |
} |
250 | 255 |
# 若 uuid 存在,则 get_or_create,否则 create |
251 | 256 |
if uuid: |
252 |
- user, created = UserInfo.objects.get_or_create(user_from=UserInfo.GUEST_USER, uuid=uuid, defaults=fields) |
|
257 |
+ user, created = UserInfo.objects.select_for_update().get_or_create(user_from=UserInfo.GUEST_USER, uuid=uuid, defaults=fields) |
|
253 | 258 |
if created: |
254 | 259 |
user.nickname = u'游客{}'.format(user.pk) |
255 | 260 |
user.save() |
256 | 261 |
else: |
257 |
- user = UserInfo.objects.create(**fields) |
|
262 |
+ user = UserInfo.objects.select_for_update().create(**fields) |
|
258 | 263 |
user.nickname = u'游客{}'.format(user.pk) |
259 | 264 |
user.save() |
260 | 265 |
|
@@ -300,7 +300,7 @@ def lensman_origin_photo_upload_api(request): |
||
300 | 300 |
photo = request.FILES.get('photo', '') |
301 | 301 |
|
302 | 302 |
try: |
303 |
- order = OrderInfo.objects.get(order_id=order_id, pay_status=OrderInfo.PAID) |
|
303 |
+ order = OrderInfo.objects.select_for_update().get(order_id=order_id, pay_status=OrderInfo.PAID) |
|
304 | 304 |
except OrderInfo.DoesNotExist: |
305 | 305 |
return response(OrderStatusCode.WX_ORDER_NOT_FOUND) |
306 | 306 |
|
@@ -375,7 +375,7 @@ def lensman_origin_photo_upload_api(request): |
||
375 | 375 |
r_photo_path=r_photo_path |
376 | 376 |
) |
377 | 377 |
|
378 |
- porder, created = GroupPhotoOrderInfo.objects.get_or_create( |
|
378 |
+ porder, created = GroupPhotoOrderInfo.objects.select_for_update().get_or_create( |
|
379 | 379 |
group_id=order.group_id, |
380 | 380 |
session_id=session_id, |
381 | 381 |
user_id=order.from_uid, |
@@ -116,7 +116,7 @@ def order_paid_success(order): |
||
116 | 116 |
order.paid_at = tc.utc_datetime() |
117 | 117 |
order.save() |
118 | 118 |
|
119 |
- porder, created = GroupPhotoOrderInfo.objects.get_or_create( |
|
119 |
+ porder, created = GroupPhotoOrderInfo.objects.select_for_update().get_or_create( |
|
120 | 120 |
group_id=order.group_id, |
121 | 121 |
session_id=order.session_id, |
122 | 122 |
user_id=order.from_uid, |
@@ -185,7 +185,7 @@ def wx_order_query_api(request): |
||
185 | 185 |
transaction_id = request.POST.get('transaction_id', '') |
186 | 186 |
|
187 | 187 |
try: |
188 |
- order = OrderInfo.objects.get(order_id=order_id) |
|
188 |
+ order = OrderInfo.objects.select_for_update().get(order_id=order_id) |
|
189 | 189 |
except OrderInfo.DoesNotExist: |
190 | 190 |
return response(OrderStatusCode.WX_ORDER_NOT_FOUND) |
191 | 191 |
|